﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AzaEngine;

namespace RenameDemo
{
    enum RenameMode
    {
        Simple = 0,
        RegExp,
        Script
    }

    // Parâmetros:
    // Simple: RenameDemo ArquivoOrigem ArquivoDestino
    //         Ex: RenameDemo *.TXT *.DOC
    // RegExp: RenameDemo ArquivoOrigem RegExp<Expressão regular> " "
    //         Ex: RenameDemo *.* RegExp<[.]> " "
    // Script: RenameDemo ArquivoOrigem Script<nome do script>
    //         Ex: RenameDemo *.* Script<rename.txt>
    class Program
    {
        public static void Exit()
        {
            Console.WriteLine("Press Enter");
            Console.ReadLine();
            Environment.Exit(0);
        }
        static void Main(string[] args)
        {
            SearchEngine searchEngine = new SearchEngine();
            RenameEngine renameEngine = new RenameEngine();
            List<Script> scripts = new List<Script>();
            List<Folder> folders;

            // Adiciona o script para remover múltiplos espaços
            scripts.Add(new Script(ReplaceInternalComponents.RemoveSpaces));


            // Seta propriedades da Busca dos arquivos
            searchEngine.Options.FileMask = "*.*";
            searchEngine.Options.Directory = @"C:\temp\testrename\";

            // Efetiva a busca dos arquivos de acordo com as opções e armazena os diretórios e arquivos no objeto folders
            folders = searchEngine.Search();

            // Aplica o script no objeto Folder (NewFileName e NewFolderName, armazenarão o nome original com os scripts aplicados)
            renameEngine.Simulation(ref folders, scripts);

            // Efetiva o rename com base em NewFileName
            renameEngine.Rename(ref folders);

            // Caso não haja simulação e o objeto Folder não possuir valores em NewFileName e NewFolderName,
            // É possível efetivar o renome dos arquivos diretamente aplicando os scripts
            //renameEngine.Rename(ref folders, scripts);



            // Mostra as mensagens geradas durante todos os processos
            foreach (Message m in Engine.Messages)
            {
                Console.WriteLine(" > " + m.Text);
            }
            
            Exit();
        }
    }
}
